package com.common.interceptor;

import java.util.ArrayList;

import com.common.GlobalPara;
import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.kit.Ret;
import com.model.User;

public class AuthInterceptor implements Interceptor{

	@Override
	public void intercept(Invocation inv) {
		String key = inv.getActionKey();
		if(!"/".equals(key)&&!"/dologin".equals(key)&&!key.startsWith("/wxsupport")){
			User currentUser= (User)inv.getController().getSession().getAttribute(GlobalPara.CURRENT_USER);
			if(currentUser==null){
				String requestType = inv.getController().getRequest().getHeader("x-requested-with");
				if(requestType!=null&&"XMLHttpRequest".equals(requestType)){//异步拦截， 主要针对session过期后点击菜单或者按钮的情况
					if(inv.getController().getPara("_type")!=null&&inv.getController().getPara("_type").equals("_refreshDataGrid")){//刷新datagrid的请求，如果不返回这些数据前台会报错
						Ret result = new Ret();
						result.set("total",0);
						result.set("rows",new ArrayList<Object>());
						result.set("_time_out", true);
						inv.getController().renderJson(result);
					}else if(inv.getController().getPara("_type")!=null&&inv.getController().getPara("_type").equals("common_ajax")){//普通的ajax请求，对应的事jsUtil 里面的ajaxRequest方法
						Ret result = new Ret();
						result.set("_time_out", true);
						inv.getController().renderJson(result);
					}else{
						String rootPath= inv.getController().getRequest().getContextPath();
						inv.getController().renderJavascript("<script id=\"script_exe\" defer=\"defer\">alert('该资源需登录后才能访问!');top.location=\""+ rootPath + "\";</script>");
					}
				}else{
					inv.getController().redirect("/");
				}
			}else{
				inv.invoke();
			}
		}else{
			inv.invoke();
		}
		
	}
	
}
